Computer users often need to disconnect from a network and work offline, such as when traveling, working at home, or at times when the network is down. As a result, various mechanisms have been directed to caching network information on a local computer to allow the information to be accessed when the local computer is disconnected from the network. Local caching also reduces the amount of data communicated between the network servers and a client working in an offline mode. Benefits to reducing the amount of transmitted data include a reduction in the server workload, a reduction in the client's perceived latency, and an increase in available network bandwidth.
However, synchronizing the cached files with the server file system's items (directories and files) has always suffered from problems. One such problem is that some previous existing synchronization mechanisms are very liberal with their use of network resources, resulting not only in heavy network loads but also in heavy server loads when many clients are attempting to synchronize with a single server.
Perhaps more significantly, synchronizing is a complex problem, and thus existing synchronization mechanisms are often unreliable and unpredictable. In part this is because some known contemporary synchronization mechanisms use a significant amount of flag-based conditional code to handle special cases, which evolved as those special cases were identified. A consequence of this is a synchronization mechanism that is difficult to debug and difficult to explain as to when and why certain items are synchronized or not synchronized.
What is needed is a comprehensively-designed system and method for synchronizing offline files that consistently operates in a deterministic manner. The method and system should be reliable, predictable, understandable, diagnosable and maintainable for essentially all possible scenarios.